//using System.Text.RegularExpressions;
//using System.Web.Mvc;
//using ContactManager.Models;

//namespace ContactManager.Controllers
//{
//    public class ContactController : Controller
//    {
//        private IContactManagerRepository _repository;

//        public ContactController()
//            : this(new EntityContactManagerRepository())
//        {}


//        public ContactController(IContactManagerRepository repository)
//        {
//            _repository = repository;
//        }

        
//        protected void ValidateContact(Contact contactToValidate)
//        {
//            if (contactToValidate.FirstName.Trim().Length == 0)
//                ModelState.AddModelError("FirstName", "First name is required.");
//            if (contactToValidate.LastName.Trim().Length == 0)
//                ModelState.AddModelError("LastName", "Last name is required.");
//            if (contactToValidate.Phone.Length > 0 && !Regex.IsMatch(contactToValidate.Phone, @"((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}"))
//                ModelState.AddModelError("Phone", "Invalid phone number.");
//            if (contactToValidate.Email.Length > 0 && !Regex.IsMatch(contactToValidate.Email, @"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$"))
//                ModelState.AddModelError("Email", "Invalid email address.");
//        }

//        public ActionResult Index()
//        {
//            return View(_repository.ListContacts());
//        }

//        public ActionResult Create()
//        {
//            return View();
//        } 

//        [AcceptVerbs(HttpVerbs.Post)]
//        public ActionResult Create([Bind(Exclude = "Id")] Contact contactToCreate)
//        {
//            // Validation logic
//            ValidateContact(contactToCreate);
//            if (!ModelState.IsValid)
//                return View();

//            // Database logic
//            try
//            {
//                _repository.CreateContact(contactToCreate);
//                return RedirectToAction("Index");
//            }
//            catch
//            {
//                return View();
//            }
//        }

//        public ActionResult Edit(int id)
//        {
//            return View(_repository.GetContact(id));
//        }

//        [AcceptVerbs(HttpVerbs.Post)]
//        public ActionResult Edit(Contact contactToEdit)
//        {
//            // Validation logic
//            ValidateContact(contactToEdit);
//            if (!ModelState.IsValid)
//                return View();

//            // Database logic
//            try
//            {
//                _repository.EditContact(contactToEdit);
//                return RedirectToAction("Index");
//            }
//            catch
//            {
//                return View();
//            }
//        }

//        public ActionResult Delete(int id)
//        {
//            return View(_repository.GetContact(id));
//        }

//        [AcceptVerbs(HttpVerbs.Post)]
//        public ActionResult Delete(Contact contactToDelete)
//        {
//            try
//            {
//                _repository.DeleteContact(contactToDelete);
//                return RedirectToAction("Index");
//            }
//            catch
//            {
//                return View();
//            }
//        }

//    }
//}
